Decoding apparatus, decoding method and program

ABSTRACT

To reduce the processing amount of a field multiplication. a denotes a k-th order vector whose elements are a 0 , . . . , a k−1  (a 0 , . . . , a k−1 ∈GF(x q )). A denotes an n-by-k matrix formed by vertically connecting a identity matrix and a Vandermonde matrix. b denotes an n-th order vector obtained by multiplying the vector a and the matrix A whose elements are b 0 , . . . , b n−1  (b 0 , . . . , b n−1 ∈GF(x q )). A vector conversion part  11  generates a ϕ-th order vector b′ using ϕ elements b p0 , . . . , b pϕ−1  of the vector b. An inverse matrix generation part  12  generates a ϕ-by-ϕ inverse matrix A′ −1 . A plaintext computation part  13  computes elements a e0 , . . . , a eϕ−1  of the vector a by multiplying the vector b′ and the inverse matrix A′ −1 .

TECHNICAL FIELD

The present invention relates to an encoding technique. In particular, it relates to a technique of efficiently performing a decoding process.

BACKGROUND ART

A conventional error correcting coding technique is Reed-Solomon codes. Reed-Solomon Codes are described in the non-patent literature 1, for example.

An encoding process for an error correcting code is a process of determining an output vector b by multiplying an input vector a in the form of a plaintext by a linear transformation (i.e., a matrix) A, which can be expressed by the formula (1). More specifically, the i-th row of the matrix A indicates coefficients by which the elements of the input vector a are multiplied in order to produce the i-th element b_(i) of the output vector b.

b=Aa  (1)

A decoding process for the error correcting code can also be regarded as a linear transformation. Provided that A′ and b′ are a matrix and a vector obtained by extracting only the rows corresponding to k elements of the matrix A and the vector b used for the decoding, respectively, the decoding process can be expressed by the formula (2).

b′=A′a  (2)

Thus, if the matrix A has an inverse matrix, the vector a can be decoded according to the formula (3).

a=A′ ⁻¹ b′  (3)

In encoding for the error correcting code, it is assumed that the input vector a is a k-th order vector expressed by the formula (4), where k denotes an integer equal to or greater than 2.

$\begin{matrix} {a = \begin{pmatrix} a_{0} \\ \vdots \\ a_{k - 1} \end{pmatrix}} & (4) \end{matrix}$

It is assumed that the output vector b is an n-th order vector expressed by the formula (5), where n denotes an integer equal to or greater than 2, and n≥2k−1.

$\begin{matrix} {b = \begin{pmatrix} b_{0} \\ \vdots \\ b_{n - 1} \end{pmatrix}} & (5) \end{matrix}$

The matrix A is a matrix formed by vertically connecting a k-by-k identity matrix and an m-by-k Vandermonde matrix, where m=n−k. The Vandermonde matrix is a matrix having a special configuration in which elements of rows or columns are the terms of a geometric progression sequentially arranged.

$\begin{matrix} {A_{ij} = \left\{ \begin{matrix} 1 & {{{if}\mspace{14mu} i} = j} \\ 0 & {{{if}\mspace{14mu} i} \neq {j\mspace{14mu} {and}\mspace{14mu} i} < k} \\ x^{{({i - k})}j} & {{{if}\mspace{14mu} i} \geq k} \end{matrix} \right.} & (6) \\ {{where}{{i \in \left\{ {0,\ldots \mspace{14mu},{n - 1}} \right\}},{j \in \left\{ {0,\ldots \mspace{14mu},{k - 1}} \right\}}}} & \; \end{matrix}$

In short, the matrix A is an n-by-k matrix expressed by the formula (7).

$\begin{matrix} {\underset{\underset{k\mspace{14mu} {columns}}{}}{\begin{pmatrix} 1 & 0 & 0 & \ldots & 0 \\ 0 & 1 & 0 & \ldots & 0 \\ 0 & 0 & 1 & \ldots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \ldots & 1 \\ 1 & 1 & 1 & \ldots & 1 \\ 1 & x & x^{2} & \ldots & x^{k - 1} \\ 1 & x^{2} & x^{4} & \ldots & x^{2{({k - 1})}} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x^{m - 1} & x^{2{({m - 1})}} & \ldots & x^{{({m - 1})}{({k - 1})}} \end{pmatrix}}\begin{matrix} \begin{matrix} \begin{matrix} \begin{matrix} \begin{matrix} \begin{matrix} \begin{matrix} \begin{matrix} \; \\ \; \end{matrix} \\ {\left. \; \right\} \mspace{11mu} k\mspace{14mu} {rows}} \end{matrix} \\ \; \end{matrix} \\ \; \end{matrix} \\ {{\}\mspace{11mu} m\mspace{14mu} {rows}}\;} \end{matrix} \\ \; \end{matrix} \\ \; \end{matrix} \\ \; \end{matrix}} & (7) \end{matrix}$

Since the matrix A is a identity matrix up to the k-th row thereof, the first to k-th elements b₀, . . . , b_(k−1) of the output vector b agree with the elements a₀, . . . , a_(k−1) of the input vector a. The elements of the output vector b that agree with the corresponding elements of the input vector a are referred to as a “data share”, and the other elements are referred to as a “parity share”.

PRIOR ART LITERATURE Non-Patent Literature

-   Non-patent literature 1: Bernard Sklar, “Digital Communications:     Foundations and Applications,” Pearson Education, 2006

SUMMARY OF THE INVENTION Problems to be Solved by the Invention

The conventional error correcting coding technique has a problem that the processing amount is high. In particular, the processing amount of the field multiplication performed in the decoding process is high.

In view of such circumstances, an object of the present invention is to provide a decoding technique that can reduce the processing amount of a field multiplication involved in an encoding technique.

Means to Solve the Problems

To solve the problem described above, a decoding apparatus according to the present invention is a decoding apparatus, wherein x is an element of an irreducible polynomial f[X] that generates an extension field GF(x^(q)), n and k are integers equal to or greater than 2, n≥2k−1, m denotes an integer equal to or greater than 1, m=n−k, a denotes a k-th order vector having elements a₀, . . . , a_(k−1) (a₀, . . . , a_(k−1)∈GF(x^(q))), A denotes a n-by-k matrix defined by the following formula:

$\begin{matrix} {A_{ij} = \left\{ \begin{matrix} 1 & {{{if}\mspace{14mu} i} = j} \\ 0 & {{{if}\mspace{14mu} i} \neq {j\mspace{14mu} {and}\mspace{14mu} i} < k} \\ x^{{({i - k})}j} & {{{if}\mspace{14mu} i} \geq k} \end{matrix} \right.} \\ {{where}{{i \in \left\{ {0,\ldots \mspace{14mu},{n - 1}} \right\}},{j \in \left\{ {0,\ldots \mspace{14mu},{k - 1}} \right\}},}} \end{matrix}$

b denotes an n-th order vector having elements b₀, . . . , b_(n−1) (b₀, . . . , b_(n−1)∈GF(x^(q))) obtained by multiplying the vector a by the matrix A, ϕ denotes an integer equal to or greater than 1 and equal to or smaller than m, d₀, . . . , d_(k−ϕ−1) denote different integers equal to or greater than 0 and smaller than k, e₀, . . . , e_(ϕ−1) denote different integers equal to or greater than 0 and smaller than k that are different from d₀, . . . , d_(k−ϕ−1), p₀, . . . , p_(ϕ−1) denote different integers equal to or greater than k and smaller than n, and

-   -   the decoding apparatus comprises:     -   a vector conversion part that generates a ϕ-th order vector b′         using ϕ elements b_(p0), . . . , b_(pϕ−1) of the vector b         according to the following formula:

$b^{\prime} = {\begin{pmatrix} b_{0}^{\prime} \\ b_{1}^{\prime} \\ \vdots \\ b_{\varphi - 1}^{\prime} \end{pmatrix} = \begin{pmatrix} {b_{p_{0}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{0}d_{i}}b_{d_{i}}}}} \\ {b_{p_{1}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{1}d_{i}}b_{d_{i}}}}} \\ \vdots \\ {b_{p_{\varphi - 1}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{\varphi - 1}d_{i}}b_{d_{i}}}}} \end{pmatrix}}$

an inverse matrix generation part that generates a ϕ-by-ϕ inverse matrix A′⁻¹ according to the following formula:

${A^{\prime - 1} = \begin{pmatrix} x^{p_{0}e_{0}} & x^{p_{0}e_{1}} & \ldots & x^{p_{0}e_{\varphi - 1}} \\ x^{p_{1}e_{0}} & x^{p_{1}e_{1}} & \ldots & x^{p_{1}e_{\varphi - 1}} \\ \vdots & \vdots & \ddots & \vdots \\ x^{p_{\varphi - 1}e_{0}} & x^{p_{\varphi - 1}e_{1}} & \ldots & x^{p_{\varphi - 1}e_{\varphi - 1}} \end{pmatrix}^{- 1}};$

a plaintext computation part that computes the elements a_(e0), . . . , a_(eϕ−1) of the vector a by multiplying the vector b′ and the inverse matrix A′⁻¹.

Effects of the Invention

According to the present invention, the processing amount of a field multiplication involved in an encoding technique can be reduced.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a diagram illustrating a functional configuration of a decoding apparatus;

FIG. 2 is a diagram illustrating a process flow of a decoding method.

DETAILED DESCRIPTION OF THE EMBODIMENTS

Before describing an embodiment, a principle of the present invention will be described.

The following description will be made on the assumption that x represents an element X of an extension field GF(2⁶⁴) expressed by an irreducible polynomial f[X]=X⁶⁴+X⁴+X³+X²+X+1. x is 2 in an integer expression.

GF(2⁶⁴) is a set of remainders of a division of a polynomial by a 64-th order polynomial f[X] whose coefficients are integers modulo 2 (division as polynomials). GF(2⁶⁴) is a field on which the four arithmetic operations are possible. GF(2⁶⁴) may also be regarded as a 64-th order vector of bits with a special arithmetic. GF(2⁶⁴) can be expressed by a 64-bit integer, a term x^(i) of which is expressed as 2^(i). For example, 1+x+x³ is expressed as 2⁰+2¹+2³=11.

Multiplication of a and b (a, b∈GF(2⁶⁴)) is an operation of multiplying two 63-th order polynomials a and b (see the formula (8)) by each other and then dividing the product by the 64-th order polynomial f (see the formula (9)). A coefficient of a λ-th order term is expressed by the formula (10).

$\begin{matrix} {{a = {\sum\limits_{1 < 64}{a_{i}x^{i}}}},{b = {\sum\limits_{1 < 64}{b_{i}x^{i}}}}} & (8) \\ {\sum\limits_{i < 64}{\sum\limits_{j < 64}{a_{i}b_{j}x^{i + j}{mod}\; f}}} & (9) \\ {\oplus_{{i + j} = \lambda}{a_{i}b_{j}}} & (10) \end{matrix}$

In the formula (9), a process of taking a modulus f of the 126-th order polynomial to provide a 63-th order polynomial is referred to as reduction. The reduction is achieved by using the equivalence relation expressed by the formula (11).

F=x ⁶⁴ +X ⁴ +x ³ +x+1=0 mod f  (11)

The formula (11) can be transformed into the formula (12), which represents a relation that reduces the 64-th order term to a fourth-order formula.

x ⁶⁴ =x ⁴ +x ³ +x+1 mod f  (12)

As shown by the formula (13), the order of any 64-th or higher order term can be reduced by 60.

x ^(64+n) =x ^(n)(x ⁴ +x ³ +x+1)mod f  (13)

The 126-th order polynomial can be expressed by a 63-th order polynomial g and a 62-th order polynomial h according to the formula (14).

g+x ⁶⁴ h=g+(x ⁴ +x ³ +x+1)h mod f  (14)

A multiplication (x+1)a of an arbitrary element a and x+1 can be expressed by the formula (15).

xa+a=xa⊕a  (15)

In addition, since the order of each term of x^(n)a is n higher than the order of the corresponding term of a, each term of x^(n)a is equivalent to 2^(n) times the term in the integer expression or the term left-shifted by n bits. Thus, x^(n)a can be expressed by the formula (16).

(x ⁴ +x ³ +x+1)h=(h<<4)⊕(h<<3)⊕(h<<1)⊕h  (16)

Since h is a 62-th order polynomial, the term

(h<<4)⊕(h<<3)

in the formula (16) is a 64-th or higher order polynomial, and the order needs to be further reduced. The part of 64-th or higher order is expressed by the formula (17).

x ⁴(h ₆₂ x ⁶² +h ₆₁ x ⁶¹ +h ₆₀ x ⁶⁰)+x ³(h ₆₂ x ⁶² +h ₆₁ x ⁶¹)=x ⁶⁴((h>>60)⊕(h>>61))  (17)

Considering that in the case of the 64-bit integer, any number is truncated to 64 bits, computation can be performed according to the formula (18).

$\begin{matrix} {{X^{64}\left( {h \oplus \left( {h\operatorname{>>}60} \right) \oplus \left( {h\operatorname{>>}61} \right)} \right)} = {{\left( {x^{4} + x^{3} + x + 1} \right)\left( {h \oplus \left( {h\operatorname{>>}60} \right) \oplus \left( {h\operatorname{>>}61} \right)} \right)} = {\left( {x^{3} + 1} \right)\left( {x + 1} \right)\left( {h \oplus \left( {h\operatorname{>>}60} \right) \oplus \left( {h\operatorname{>>}61} \right)} \right)}}} & (18) \end{matrix}$

In multiplication, if one of the multiplier is a number with 61 bits or a smaller number of bits (more strictly, if the total number of bits of the multipliers is equal to or less than 125), the formula (19) holds, so that the reduction can be made more efficient.

(h>>60)⊕(h>>61)=0  (19)

Thus, considering the processing amount including the reduction, the multiplication by a 61-bit number with only one bit being 1 (in other words, 2^(i) where 0≤i≤60) is quick.

As described above, in the decoding process for an error correcting code, the vector a in the form of a plaintext is decoded by multiplying the vector b′ formed by extracting elements of the vector b used for decoding by the inverse matrix of the matrix A′ formed by extracting rows corresponding to the elements of the vector b′ of the matrix A used for encoding. If all the data shares b₀, . . . , b_(k−1) are available, the data shares are the elements of the input vector themselves, so that the input can be used as it is. On the other hand, if any data share is unavailable, the plaintext needs to be reconstructed from the available data shares and a parity share.

Reconstruction of the plaintext is performed as described below. It is assumed that there is ϕ unavailable data shares, where ϕ≤m. Conceptually, it is enough to extract ϕ rows of the inverse matrix and multiply the available data shares by extracted ϕ rows. In general, however, the elements of the inverse matrix are not x to the power of up to 60, so that the processing amount in the case of the multiplication by ϕ rows is expressed by the formula (20). In the formula, MUL represents the processing amount of one carry-less multiplication, and RED represents the processing amount of one reduction. The carry-less multiplication can be achieved by one PCLMUL instruction with a Sandy-bridge or later CPU available from Intel® Corporation or a Bulldozer or later CPU available from AMD® Inc.

ϕ(kMUL+RED)  (20)

Instead of multiplication by the inverse matrix itself, taking advantage of the fact that the data share has only one element of the input vector, elements of the input vector that correspond to the data shares are first removed from the parity shares. For example, as shown by the formula (21), the 0-th element of the plaintext can be removed from the parity share b_(p) (where p denotes an identification number of any parity share) by using the data share b₀.

Since b₀=(1 0 0 . . . 0)a, and

b _(p)=(1 x ^(pk) x ^((p−k)2) . . . x ^((p−k)(k−1)))a,

b _(p) −b ₀=(0 x ^(p−k) x ^((p−k)2) . . . x ^((p−k)(k−1)))a  (21)

By using such a transformation, elements a_(e0), . . . , a_(eϕ−1) of the vector a to be reconstructed can be expressed by a ϕ-th order square matrix whose order is lower than k.

$\begin{matrix} {\left. {\begin{pmatrix} {b_{p_{0}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{0}d_{i}}b_{d_{i}}}}} \\ {b_{p_{1}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{1}d_{i}}b_{d_{i}}}}} \\ \vdots \\ {b_{p_{\varphi - 1}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{\varphi - 1}d_{i}}b_{d_{i}}}}} \end{pmatrix} = {\underset{\underset{\varphi \mspace{14mu} {columns}}{}}{\begin{pmatrix} x^{p_{0}e_{0}} & x^{p_{0}e_{1}} & \ldots & x^{p_{0}e_{\varphi - 1}} \\ x^{p_{1}e_{0}} & x^{p_{1}e_{1}} & \ldots & x^{p_{1}e_{\varphi - 1}} \\ \vdots & \vdots & \ddots & \vdots \\ x^{p_{\varphi - 1}e_{0}} & x^{p_{\varphi - 1}e_{1}} & \ldots & x^{p_{\varphi - 1}e_{\varphi - 1}} \end{pmatrix}}\begin{pmatrix} a_{e_{0}} \\ a_{e_{1}} \\ \vdots \\ a_{e_{\varphi - 1}} \end{pmatrix}}} \right\} \; \varphi \mspace{11mu} {rows}} & (22) \end{matrix}$

In the formula, d₀, . . . , d_(k−ϕ−1) are identification numbers of the available data shares, e₀, . . . , e_(ϕ−1) are identification numbers of the unavailable data shares, and p₀, . . . , p_(ϕ−1) are identification numbers of the parity shares used for the reconstruction. That is, d₀, . . . , d_(k−ϕ−1) denote different integers equal to or greater than 0 and smaller than k, e₀, . . . , e_(ϕ−1) denote different integers equal to or greater than 0 and smaller than k that are different from d₀, . . . , d_(k−ϕ−1), and p₀, . . . , p_(ϕ−1) denote different integers equal to or greater than k and smaller than n.

The left-hand side of the formula (22) is designated as the vector b′, and the plaintext can be reconstructed by multiplying the vector b′ by an inverse matrix of the ϕ-th order square matrix.

$\begin{matrix} {{{\begin{pmatrix} x^{p_{0}e_{0}} & x^{p_{0}e_{1}} & \ldots & x^{p_{0}e_{\varphi - 1}} \\ x^{p_{1}e_{0}} & x^{p_{1}e_{1}} & \ldots & x^{p_{1}e_{\varphi - 1}} \\ \vdots & \vdots & \ddots & \vdots \\ x^{p_{\varphi - 1}e_{0}} & x^{p_{\varphi - 1}e_{1}} & \ldots & x^{p_{\varphi - 1}e_{\varphi - 1}} \end{pmatrix}^{- 1}\begin{pmatrix} b_{0}^{\prime} \\ b_{1}^{\prime} \\ \vdots \\ b_{\varphi - 1}^{\prime} \end{pmatrix}} = \begin{pmatrix} a_{e_{0}} \\ a_{e_{1}} \\ \vdots \\ a_{e_{\varphi - 1}} \end{pmatrix}}{where}{b^{\prime} = {\begin{pmatrix} b_{0}^{\prime} \\ b_{1}^{\prime} \\ \vdots \\ b_{\varphi - 1}^{\prime} \end{pmatrix} = \begin{pmatrix} {b_{p_{0}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{0}d_{i}}b_{d_{i}}}}} \\ {b_{p_{1}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{1}d_{i}}b_{d_{i}}}}} \\ \vdots \\ {b_{p_{\varphi - 1}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{\varphi - 1}d_{i}}b_{d_{i}}}}} \end{pmatrix}}}} & (23) \end{matrix}$

The processing amount required to generate the vector b′ is expressed by the formula (24). In the formula, BMUL represents the processing amount of one multiplication one of whose multiplier is a monomial, and BRED represents the processing amount of one reduction involved in a multiplication the total of the orders of the highest-order terms of whose multipliers is equal to or smaller than 2q−d−1.

(k−ϕ)ϕBMUL+ϕBRED  (24)

The processing amount required for the multiplication of the vector b′ by the ϕ-th order inverse matrix is expressed by the formula (25).

ϕ²MUL+ϕRED  (25)

Thus, the total processing amount is expressed by the formula (26), which is the sum of the formulas (24) and (25).

ϕ((k−ϕ)BMUL+ϕMUL+BRED+RED)  (26)

If there is one unavailable data share, that is, if ϕ=1, the formula (23) can be rewritten as the formula (27). Thus, an inverse element of x^(p0e0) can be calculated in advance, and b′₀ can be multiplied by the inverse element.

(x ^(p) ⁰ ^(e) ⁰ )⁻¹(b′ ₀)=(a _(e) ₀ )  (27)

If there are two to four unavailable data shares, that is, if 2≤ϕ≤4, the order can be further reduced by one. If ϕ≥2, all the elements of the ϕ-th order square matrix expressed by the formula (22) are powers of x. Thus, if the parity shares are arranged according to p₀<p₁< . . . <p_(ϕ−1), the order can be further reduced by one in BMUL and BRED as shown by the formula (28).

$\begin{matrix} {{\underset{\underset{\varphi - {1\mspace{14mu} {rows}\mspace{14mu} \varphi} - {1\mspace{11mu} {columns}}}{}}{\begin{pmatrix} {x^{p_{1}e_{1}} - x^{{p_{0}e_{1}} + {{({p_{1} - p_{0}})}e_{0}}}} & \ldots & {x^{p_{1}e_{\varphi - 1}} - x^{{({p_{1} - p_{0}})}e_{0}}} \\ {x^{p_{2}e_{1}} - x^{{p_{0}e_{1}} + {{({p_{2} - p_{0}})}e_{0}}}} & \ldots & {x^{p_{2}e_{\varphi - 1}} - x^{{({p_{2} - p_{0}})}e_{0}}} \\ \vdots & \ddots & \vdots \\ {x^{p_{\varphi - 1}e_{1}} - x^{{p_{0}e_{1}} + {{({p_{\varphi - 1} - p_{0}})}e_{0}}}} & \ldots & {x^{p_{\varphi - 1}e_{\varphi - 1}} - x^{{({p_{\varphi - 1} - p_{0}})}e_{0}}} \end{pmatrix}^{- 1}}\begin{pmatrix} {b_{1}^{\prime} - {x^{{({p_{1} - p_{0}})}e_{0}}b_{0}^{\prime}}} \\ {b_{2}^{\prime} - {x^{{({p_{2} - p_{0}})}e_{0}}b_{0}^{\prime}}} \\ \vdots \\ {b_{\varphi - 1}^{\prime} - {x^{{({p_{\varphi - 1} - p_{0}})}e_{0}}b_{0}^{\prime}}} \end{pmatrix}} = \begin{pmatrix} a_{e_{1}} \\ a_{e_{2}} \\ \vdots \\ a_{e_{\varphi - 1}} \end{pmatrix}} & (28) \end{matrix}$

The remaining a_(e0) is calculated using a_(e1), . . . , a_(eϕ−1) determined from the formula (28) according to the formula (29).

$\begin{matrix} {a_{e_{0}} = {x^{{- p_{0}}e_{0}}\left( {b_{0}^{\prime} - {\sum\limits_{1 \leq i < \varphi}{x^{p_{0}e_{i}}a_{e_{i}}}}} \right)}} & (29) \end{matrix}$

In this case, the processing amount is expressed by the formula (30).

(k−ϕ)ϕBMUL+ϕBRED+(ϕ−1)BMUL+(ϕ−1)BRED+(ϕ−1)²MUL+(ϕ−1)RED+(ϕ−1)BMUL+BRED+MUL+RED=ϕ((k−ϕ+2)BMUL+(ϕ−2)MUL+2BRED+RED)+2(−BMUL+MUL)  (30)

It will be now described that the formula (30) shows a reduced processing amount. First, the total of BMUL and MUL is k) in all of the formulas (20), (26) and (30). Next, it will be confirmed that MUL has been reduced. MUL is kϕ in the formula (20), 2ϕ in the formula (26) and ϕ²−2ϕ+2 in the formula (30). If ϕ≥2, a relation holds: formula (30)<formula (26)<formula (20). In terms of RED, a relation holds: formula (30)=formula (26)<formula (20). BRED increases with formula: BRED is 0 in the formula (20), ϕ in the formula (26) and 2ϕ in the formula (30). However, if ϕ≥2, the increment is equal to or smaller than the reduction in MUL. Thus, if a relation BRED+BMUL<MUL holds, the total processing amount is reduced. If ϕ≥5, both of b′_(i) and b′_(i)−x^((pi−p0)e0)b′₀ cannot be held for each i, and an overhead of loading/storing occurs, so that this order reduction is not performed.

If there are two unavailable data shares, ϕ−1=1. Thus, as in the case where ϕ=1, the formula (28) can be rewritten as the formula (31). Thus, an inverse element of x^(p1e1)−x^(p0e1+(p1−p0)e0) can be calculated in advance, and b′₁ can be multiplied by the inverse element. Then, a_(e0) is reconstructed according to the formula (29).

(x ^(p) ¹ ^(e) ¹ −x ^(p) ⁰ ^(e) ¹ ^(+(p) ¹ ^(−p) ⁰ ^()e) ⁰ )−(b′ ₁)=(a _(e) ₀ )  (31)

If there are three or more unavailable data shares, the processing amount when the multiplication by the inverse matrix is performed is expressed by the formula (32).

ϕ²MUL+ϕRED  (32)

If one (a_(e0), for example) of a_(e0), . . . , a_(eϕ−1) is reconstructed, the required processing amount is expressed by the formula (33).

ϕMUL+RED  (33)

Then, in the same manner as in the case of the reduction of data-share components, the processing amount can be reduced by one order as expressed by the formula (34).

(ϕ−1)(BMUL+BRED)  (34)

After such an order reduction is repeated, and the processing amount is expressed by the formula (35).

ϕ(ϕ+1)/2MUL+ϕ(ϕ−1)/2BMUL+ϕRED+ϕ(ϕ−1)/2BRED  (35)

Comparing with the formula (26), the sum of MUL and BMUL is the same, and the ratio of MUL is reduced by approximately half, although only BRED has increased. However, the increment is equal to the reduction in MUL, so that if BUL+BRED<MUL, the total processing amount has decreased.

The formula (35) shows the minimum absolute computation amount. However, the method of reconstructing the data shares one by one and repeating removal of the data-share component from the parity shares has a problem that the parallelism of MUL and RED decreases. Comparing the multiplication by the inverse matrix that has a high level of parallelism, the number of processings that can only sequentially be performed increases, so that the performance of the CPU may decrease depending on the number of MULs or REDs that can be executed in parallel by the CPU. Thus, it can be concluded that a method of using the inverse matrix to reconstruct a number of data shares equal to the number of MULs or REDs that can be executed in parallel by the CPU and removing the reconstructed components from the parity shares each time the data shares are reconstructed is the quickest. The number of MULs that can be executed in parallel is 1 and 2 for Ivy-Bridge and Haswell available from Intel Corporation, respectively, and the number of REDs that can be executed in parallel is 2 for both Ivy-Bridge and Haswell.

An example of an algorithm that implements the decoding process for the error correcting code described above is expressed by the following formula. In the formula, f denotes the number of unavailable data shares, d₀, . . . , d_(k−f−1) are identification number of k−f available data shares, p₀, . . . , p_(f−1) are identification numbers of f available parity shares, e₀, . . . , e_(f−1) are identification numbers of plaintexts to be reconstructed, k−f data shares b_(d0), . . . , b_(dk−f−1) and f parity shares b_(p0), . . . , b_(pf−1) are inputs, a row C₀, . . . of a coefficient matrix and coefficients c₀ and c₁ are auxiliary inputs, and plaintexts a_(e0), . . . , a_(ef−1) are outputs.

1: $b^{\prime}:={\begin{pmatrix} \begin{matrix} b_{0}^{\prime} \\ b_{1}^{\prime} \end{matrix} \\ \vdots \\ b_{f - 1}^{\prime} \end{pmatrix} = \begin{pmatrix} {b_{p_{0}} - {\sum\limits_{i < f}{x^{p_{0}d_{i}}b_{d_{i}}}}} \\ {b_{p_{1}} - {\sum\limits_{i < f}{x^{p_{1}d_{i}}b_{d_{i}}}}} \\ \vdots \\ {b_{p_{f - 1}} - {\sum\limits_{i < f}{x^{p_{f - 1}d_{i}}b_{d_{i}}}}} \end{pmatrix}}$ 2: if f ∈ {3,4} then 3:   $b^{''}:={\begin{pmatrix} \begin{matrix} b_{0}^{''} \\ b_{1}^{''} \end{matrix} \\ \vdots \\ b_{f - 2}^{''} \end{pmatrix} = \begin{pmatrix} {b_{1}^{\prime} - {x^{{({p_{1} - p_{0}})}e_{0}}b_{0}^{\prime}}} \\ {b_{2}^{\prime} - {x^{{({p_{2} - p_{0}})}e_{0}}b_{0}^{\prime}}} \\ \vdots \\ {b_{f - 1}^{\prime} - {x^{{({p_{f - 1} - p_{0}})}e_{0}}b_{0}^{\prime}}} \end{pmatrix}}$ 4:  f′ := f − 1 5: else 6:  b″ := b′(just regarded as being so and not copied or otherwise used.) 7:  f′ := f 8: i := 0 9: while f′ > 2 do 10:   $\begin{pmatrix} a_{e_{f^{\prime} - 1}} \\ a_{e_{f^{\prime} - 2}} \end{pmatrix} = {\begin{pmatrix} \left( C_{i} \right)_{00} & \left( C_{i} \right)_{01} & \cdots & \left( C_{1} \right)_{0{({f^{\prime} - 1})}} \\ \left( C_{i} \right)_{10} & \left( C_{i} \right)_{11} & \cdots & \left( C_{1} \right)_{1{({f^{\prime} - 1})}} \end{pmatrix}\begin{pmatrix} \begin{matrix} b_{0}^{''} \\ b_{1}^{''} \end{matrix} \\ \vdots \\ b_{f^{\prime} - 1}^{''} \end{pmatrix}}$ 11:   $b^{\prime}:={\begin{pmatrix} \begin{matrix} b_{0}^{\prime} \\ b_{1}^{\prime} \end{matrix} \\ \vdots \\ b_{f^{\prime} - 3}^{\prime} \end{pmatrix} = {\begin{pmatrix} {b_{0}^{\prime} - {\sum\limits_{{f^{\prime} - 2} \leq i < f^{\prime}}{x^{p_{0}e_{i}}a_{e_{i}}}}} \\ {b_{1}^{\prime} - {\sum\limits_{{f^{\prime} - 2} \leq i < f^{\prime}}{x^{p_{1}e_{i}}a_{e_{i}}}}} \\ \vdots \\ {b_{f^{\prime} - 3}^{\prime} - {\sum\limits_{{f^{\prime} - 2} \leq i < f^{\prime}}{x^{p_{f^{\prime} - 3}e_{i}}a_{e_{i}}}}} \end{pmatrix}({update})}}$ 12:  f′ := f′ − 2 13: if f′ = 2 then 14:  a_(e) ₁ := c₁b₁′, where c₁ = (x^(p) ₁ ^(e) ₁ − x^(p) ₀ ^(e) ₁ ⁺ ^((p) ₁ ^(−p) ₀ ^()e) ₀)⁻¹ 15:  b₀' := x^(p) ₀ ^(e) ₁a_(e) ₁ (update) 16: a_(e) ₀ := c₀b₀ ^(′) , where c₀ = (x^(p) ₀ ^(e) ₀)⁻¹

The coefficient matrix C_(i) and the coefficients c₀ and c₁, which are auxiliary inputs, are set as follows depending on the value of ϕ.

If ϕ=1, c₀ in the following formula is the only coefficient. Since c₀ is an inverse element of a power of x, c₀ can be calculated only by referring to a table.

c ₀=(x ^(p) ⁰ ^(e) ⁰ )⁻¹

If ϕ=2, c₁ in the following formula is also used in addition to c₀ described above.

c ₁=(x ^(p) ¹ ^(e) ¹ −x ^(p) ⁰ ^(e) ¹ ^(+(p) ¹ ^(−p) ⁰ ^()e) ⁰ )⁻¹

If ϕ=3, in addition to c₀ and c₁ described above, an inverse matrix of the ϕ−1-th order square matrix of the left-hand side of the formula (28) is used.

If ϕ=4, c₀ and c₁ described above and the first (numbered 0) and second rows of the inverse matrix of the ϕ−1-th order square matrix of the left-hand side of the formula (28) are used. Each of the rows of the inverse matrix is equal to a sequence of coefficients used to reconstruct one plaintext share. Considering the number of MULs or REDs that can be executed in parallel by the CPU described above, the plaintext shares can be efficiently reconstructed on a two-by-two basis from the end to the beginning, so that only the last two rows are needed.

If ϕ=5, as in the case where ϕ=4, the plaintext shares are reconstructed on a two-by-two basis from the end to the beginning, so that the last two rows of an inverse matrix of the ϕ-th order square matrix are first needed. The last two rows of an inverse matrix of the remaining ϕ−2-th square matrix are then needed. In this way, for each i that satisfies a relation ϕ−2i<3, the last two rows of an inverse matrix of the ϕ−2i-th square matrix in the upper left part of the ϕ-th square matrix are needed. There is no need to determine ϕ/2 inverse matrices, and only one triangulation is needed. This is because, in both triangulation and backward substitution, the upper left part of the matrix is not affected by the lower right part, and a triangular matrix of a matrix minus the rightmost two columns and the bottom two rows is the same as a triangular matrix of the whole of the matrix minus the rightmost two columns and the bottom two rows.

In the following, an embodiment of the present invention will be described in detail. In the drawings, components having the same function are denoted by the same reference numerals, and redundant descriptions thereof will be omitted.

As illustrated in FIG. 1, a decoding apparatus 1 according to the embodiment comprises a vector input part 10, a vector conversion part 11, an inverse matrix generation part 12, a plaintext computation part 13, and a vector output part 14. A decoding method according to the embodiment is achieved by the decoding apparatus 1 performing processings in steps illustrated in FIG. 2.

The decoding apparatus 1 is a special apparatus formed by a well-known or dedicated computer in which a special program is loaded, the computer having a central processing unit (CPU: Central Processing Unit), a main memory (RAM: Random Access Memory), and other components. The decoding apparatus 1 performs the processings under the control of the central processing unit. Data input to the decoding apparatus 1 and data resulting from the processings are stored in the main memory, and the data stored in the main memory is loaded to the central processing unit and used for other processings. At least part of the processing parts of the decoding apparatus 1 may be formed by hardware, such as an integrated circuit.

With reference to FIG. 2, a procedure of the decoding method according to the embodiment will be described.

In step S10, an n-th order vector b is input to the vector input part 10. ϕ available elements b_(p0), . . . , b_(pϕ−1) (b_(p0), . . . , b_(pϕ−1)∈GF(x^(q))) of the parity shares of the n-th order vector b are fed to the vector conversion part 11. In addition, k−ϕ available elements b_(d0), . . . , b_(dk−ϕ−1) of the data shares of the vector b are fed to the vector output part 14. The vector b is an n-th order vector obtained by multiplying a k-th order vector a defined by the formula (36) by an n-by-k matrix A defined by the formula (37).

$\begin{matrix} {a = \begin{pmatrix} a_{0} \\ \vdots \\ a_{k - 1} \end{pmatrix}} & (36) \\ \begin{matrix} {A_{ij} = \left\{ \begin{matrix} 1 & {{{if}\mspace{14mu} i} = j} \\ 0 & {{{if}\mspace{14mu} i} \neq {j\mspace{14mu} {and}\mspace{14mu} i} < k} \\ x^{{({i - k})}j} & {{{if}\mspace{14mu} i} \geq k} \end{matrix} \right.} \\ {{where}{{i \in \left\{ {0,\ldots \mspace{14mu},{n - 1}} \right\}},{j \in \left\{ {0,\ldots \mspace{14mu},{k - 1}} \right\}}}} \end{matrix} & (37) \end{matrix}$

In step S11, the vector conversion part 11 generates a ϕ-th order vector b′ using b_(p0), . . . , b_(pϕ−1) according to the formula (38). The vector b′ is fed to the plaintext computation part 13.

$\begin{matrix} {b^{\prime} = {\begin{pmatrix} b_{0}^{\prime} \\ b_{1}^{\prime} \\ \vdots \\ b_{\varphi - 1}^{\prime} \end{pmatrix} = \begin{pmatrix} {b_{p_{0}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{0}d_{i}}b_{d_{i}}}}} \\ {b_{p_{1}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{1}d_{i}}b_{d_{i}}}}} \\ \vdots \\ {b_{p_{\varphi - 1}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{\varphi - 1}d_{i}}b_{d_{i}}}}} \end{pmatrix}}} & (38) \end{matrix}$

In step S12, the inverse matrix generation part 12 generates a ϕ-by-ϕ inverse matrix A′⁻¹ according to the formula (39). The inverse matrix A′⁻¹ is fed to the plaintext computation part 13. Since if the ϕ of the k parity shares used for reconstruction are determined, the inverse matrix A′⁻¹ can be generated, the inverse matrix A′⁻¹ may be computed in advance for all of the ϕ combinations. In that case, the inverse matrix generation part 12 has only to select an appropriate one of the inverse matrices generated in advance.

$\begin{matrix} {A^{\prime - 1} = \begin{pmatrix} x^{p_{0}e_{0}} & x^{p_{0}e_{1}} & \ldots & x^{p_{0}e_{\varphi - 1}} \\ x^{p_{1}e_{0}} & x^{p_{1}e_{1}} & \ldots & x^{p_{1}e_{\varphi - 1}} \\ \vdots & \vdots & \ddots & \vdots \\ x^{p_{\varphi - 1}e_{0}} & x^{p_{\varphi - 1}e_{1}} & \ldots & x^{p_{\varphi - 1}e_{\varphi - 1}} \end{pmatrix}^{- 1}} & (39) \end{matrix}$

In step S13, the plaintext computation part 13 computes elements a_(e0), . . . , a_(eϕ−1) of the vector a by multiplying the vector b′ by the inverse matrix A′⁻¹ according to the formula (40). The elements a_(e0), . . . , a_(eϕ−1) are fed to the vector output part 14.

$\begin{matrix} {{\begin{pmatrix} x^{p_{0}e_{0}} & x^{p_{0}e_{1}} & \ldots & x^{p_{0}e_{\varphi - 1}} \\ x^{p_{1}e_{0}} & x^{p_{1}e_{1}} & \ldots & x^{p_{1}e_{\varphi - 1}} \\ \vdots & \vdots & \ddots & \vdots \\ x^{p_{\varphi - 1}e_{0}} & x^{p_{\varphi - 1}e_{1}} & \ldots & x^{p_{\varphi - 1}e_{\varphi - 1}} \end{pmatrix}^{- 1}\begin{pmatrix} b_{0}^{\prime} \\ b_{1}^{\prime} \\ \vdots \\ b_{\varphi - 1}^{\prime} \end{pmatrix}} = \begin{pmatrix} a_{e_{0}} \\ a_{e_{1}} \\ \vdots \\ a_{e_{\varphi - 1}} \end{pmatrix}} & (40) \end{matrix}$

In step S14, the vector output part 14 reconstructs the k-th order vector a by using as elements thereof the k−ϕ elements b_(d0), . . . , b_(dk−ϕ−1) received from the vector input part 10 and the 4 elements a_(e0), . . . , a_(eϕ−1) computed by the plaintext computation part 13, and outputs the vector a.

The decoding apparatus according to the embodiment configured as described above performs decoding by reducing the order of the matrix A′ from the k-th order square matrix to the ϕ-th order square matrix and then applying the inverse matrix A′⁻¹. Thus, ϕ(k−ϕ) polynomial multiplications of ϕk polynomial multiplications are less computationally intensive polynomial multiplications that involve only transposition of terms, so that the decoding process is efficient. The computation amount of an ordinary polynomial multiplication is q² for an extension degree q. On the other hand, the computation amount of the multiplication involving only transposition of terms is q if the transportation actually occurs and 1 if a flag of the transposition amount is set.

The decoding technique according to the present invention can be applied to the computational secret sharing. The computational secret sharing is a secret sharing scheme that inhibits reconstruction of original data from a number of variances smaller than a predetermined number based on the computational security. The computational secret sharing is described in the reference literature 1 listed below, for example.

-   [Reference Literature 1] H. Krawczyk, “Secret sharing made short.”,     CRYPTO 1993, pp. 136-146, 1993

The present invention is not limited to the embodiment described above, and modifications can be made as required without departing from the spirit of the present invention. The various processings described above with regard to the embodiment are not necessarily sequentially performed in the order described above but also can be performed in parallel with or independently of each other depending on the processing capacity of the apparatus that performs the processings or as required.

[Program and Storage Medium]

When a computer carries out the various processing functions of the apparatus according to the embodiment described above, the specific processings of the functions that the apparatus needs to have are described in a program. The various processing functions of the apparatus described above are implemented on the computer by the computer executing the program.

The program that describes the specific processings can be recorded in a computer readable recording medium. Any computer readable recording medium can be used, such as a magnetic recording device, an optical disk, a magneto-optical recording medium, or a semiconductor memory.

The program can be distributed by selling, transferring or lending a portable recording medium, such as a DVD, a CD-ROM, or an USB memory, on which the program is recorded, for example. Furthermore, the program may be distributed by storing the program in a memory of a server computer and transferring the program from the server computer to another computer.

The computer that executes the program first temporarily stores, in a memory thereof, the program recorded on a portable recording medium or transferred from a server computer, for example. When performing the processings, the computer reads the program from the memory of the computer and performs the processings according to the read program. In an alternative implementation, the computer may read the program directly from the portable recording medium and perform the processings according to the program, or the computer may perform the processings according to the program each time the computer receives the program transferred from the server computer. As a further alternative, the processings described above may be performed on an application service provider (ASP) basis, in which the server computer does not transfer the program to the computer, and the processings are implemented only through execution instruction and result acquisition. The program according to the embodiment of the present invention include a quasi-program, which is information to be processed by a computer (such as data that is not a direct instruction to a computer but has a property that defines the processings performed by the computer).

Although the apparatus according to the embodiment of the present invention have been described as being implemented by a computer executing a predetermined program, at least part of the specific processings may be implemented by hardware. 

1: A decoding apparatus, wherein x is an element of an irreducible polynomial f[X] that generates an extension field GF(x^(q)), n and k are integers equal to or greater than 2, n≥2k−1, m denotes an integer equal to or greater than 1, m=n−k, a denotes a k-th order vector having elements a₀, . . . , a_(k−1) (a₀, . . . , a_(k−1)∈GF(x^(q))), A denotes a n-by-k matrix defined by the following formula: $A_{ij} = \left\{ {{{\begin{matrix} 1 & {{{if}\mspace{14mu} i} = j} \\ 0 & {{{if}\mspace{14mu} i} \neq {j\mspace{14mu} {and}\mspace{14mu} i} < k} \\ x^{{({i - k})}j} & {{{if}\mspace{14mu} i} \geq k} \end{matrix}{where}i} \in \left\{ {0,\ldots \mspace{14mu},{n - 1}} \right\}},{j \in \left\{ {0,\ldots \mspace{14mu},{k - 1}} \right\}},} \right.$ b denotes an n-th order vector having elements b₀, . . . , b_(n−1) (b₀, . . . , b_(n−1)∈GF(x^(q))) obtained by multiplying the vector a by the matrix A, ϕ denotes an integer equal to or greater than 1 and equal to or smaller than m, d₀, . . . , d_(k−ϕ−1) denote different integers equal to or greater than 0 and smaller than k, e₀, . . . , e_(ϕ−1) denote different integers equal to or greater than 0 and smaller than k that are different from d₀, . . . , d_(k−ϕ−1), p₀, . . . , p_(ϕ−1) denote different integers equal to or greater than k and smaller than n, and the decoding apparatus comprises: circuitry configured to: generate a ϕ-th order vector b′ using ϕ elements b_(p0), . . . , b_(pϕ−1) of the vector b according to the following formula: $b^{\prime} = {\begin{pmatrix} b_{0}^{\prime} \\ b_{1}^{\prime} \\ \vdots \\ b_{\varphi - 1}^{\prime} \end{pmatrix} = \begin{pmatrix} {b_{p_{0}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{0}d_{i}}b_{d_{i}}}}} \\ {b_{p_{1}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{1}d_{i}}b_{d_{i}}}}} \\ \vdots \\ {b_{p_{\varphi - 1}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{\varphi - 1}d_{i}}b_{d_{i}}}}} \end{pmatrix}}$ generate a ϕ-by-ϕ inverse matrix A′⁻¹ according to the following formula: ${A^{\prime - 1} = \begin{pmatrix} x^{p_{0}e_{0}} & x^{p_{0}e_{1}} & \ldots & x^{p_{0}e_{\varphi - 1}} \\ x^{p_{1}e_{0}} & x^{p_{1}e_{1}} & \ldots & x^{p_{1}e_{\varphi - 1}} \\ \vdots & \vdots & \ddots & \vdots \\ x^{p_{\varphi - 1}e_{0}} & x^{p_{\varphi - 1}e_{1}} & \ldots & x^{p_{\varphi - 1}e_{\varphi - 1}} \end{pmatrix}^{- 1}};$ and compute the elements a_(e0), . . . , a_(eϕ−1) of the vector a by multiplying the vector b′ and the inverse matrix A′⁻¹. 2: The decoding apparatus according to claim 1, wherein ϕ denotes an integer equal to or greater than 2 and equal to or smaller than 4, the circuitry configured to generate a ϕ−1-th order vector b″ using the vector b′ according to the following formula: ${b^{''} = {\begin{pmatrix} b_{0}^{''} \\ b_{1}^{''} \\ \vdots \\ b_{\varphi - 2}^{''} \end{pmatrix} = \begin{pmatrix} {b_{1}^{\prime} - {x^{{({p_{1} - p_{0}})}e_{0}}b_{0}^{\prime}}} \\ {b_{2}^{\prime} - {x^{{({p_{2} - p_{0}})}e_{0}}b_{0}^{\prime}}} \\ \vdots \\ {b_{\;_{\varphi - 1}}^{\prime} - {x^{{({p_{\varphi - 1} - p_{0}})}e_{0}}b_{0}^{\prime}}} \end{pmatrix}}},$ generate a ϕ−1-by-ϕ−1 inverse matrix A″⁻¹ according to the following formula: ${A^{'' - 1} = \begin{pmatrix} {x^{p_{1}e_{1}} - x^{{p_{0}e_{1}} + {{({p_{1} - p_{0}})}e_{0}}}} & \ldots & {x^{p_{1}e_{\varphi - 1}} - x^{{({p_{1} - p_{0}})}e_{0}}} \\ {x^{p_{2}e_{1}} - x^{{p_{0}e_{1}} + {{({p_{2} - p_{0}})}e_{0}}}} & \ldots & {x^{p_{2}e_{\varphi - 1}} - x^{{({p_{2} - p_{0}})}e_{0}}} \\ \vdots & \ddots & \vdots \\ {x^{p_{\varphi - 1}e_{1}} - x^{{p_{0}e_{1}} + {{({p_{\varphi - 1} - p_{0}})}e_{0}}}} & \ldots & {x^{p_{\varphi - 1}e_{\varphi - 1}} - x^{{({p_{\varphi - 1} - p_{0}})}e_{0}}} \end{pmatrix}^{- 1}},$ and compute the elements a_(e1), . . . , a_(eϕ−1) of the vector a by multiplying the vector b″ and the inverse matrix A″⁻¹ and computes the element a_(e0) of the vector a according to the following formula: $a_{e_{0}} = {{x^{{- p_{0}}e_{0}}\left( {b_{0}^{\prime} - {\sum\limits_{i \leq i < \varphi}{x^{p_{0}e_{i}}a_{e_{i}}}}} \right)}.}$ 3: The decoding apparatus according to claim 2, wherein the circuitry is configured to compute the elements a_(e2), . . . , a_(eϕ−1) of the vector a by repeating parallel multiplications of the last two rows of a ϕ−2i-th order square matrix in an upper left part of the inverse matrix A″⁻¹ by the 0-th to ϕ−2i−1-th elements of the vector b″ for i that satisfies a relation ϕ−2i<3, compute the element a_(e1) of the vector a according to the following formula: a _(e) ₁ =c ₁ b ₁′ where c ₁=(x ^(p) ¹ ^(e) ¹ −x ^(p) ⁰ ^(e) ¹ ^(+(p) ¹ ^(−p) ⁰ ^()e) ⁰ )⁻¹, and compute the element a_(e0) of the vector a according to the following formula: a _(e) ₀ =c ₀ b′ ₀ where b′ ₀ =x ^(p) ⁰ ^(e) ¹ a _(e) ₁ ,c ₀=(x ^(p) ⁰ ^(e) ⁰ )⁻¹. 4: The decoding apparatus according to claim 1, wherein x=2, and the circuitry is configured to perform an exclusive-OR operation as an addition and perform a bit shift operation as a polynomial multiplication. 5: A decoding method, wherein x is an element of an irreducible polynomial f[X] that generates an extension field GF(x^(q)), n and k are integers equal to or greater than 2, n≥2k−1, m denotes an integer equal to or greater than 1, m=n−k, a denotes a k-th order vector having elements a₀, . . . , a_(k−1) (a₀, . . . , a_(k−1)∈GF(x^(q))), A denotes a n-by-k matrix defined by the following formula: $A_{ij} = \left\{ {{{\begin{matrix} 1 & {{{if}\mspace{14mu} i} = j} \\ 0 & {{{if}\mspace{14mu} i} \neq {j\mspace{14mu} {and}\mspace{14mu} i} < k} \\ x^{{({i - k})}j} & {{{if}\mspace{14mu} i} \geq k} \end{matrix}{where}i} \in \left\{ {0,\ldots \mspace{14mu},{n - 1}} \right\}},{j \in \left\{ {0,\ldots \mspace{14mu},{k - 1}} \right\}},} \right.$ b denotes an n-th order vector having elements b₀, . . . , b_(n−1) (b₀, . . . , b_(n−1)∈GF(x^(q))) obtained by multiplying the vector a by the matrix A, ϕ denotes an integer equal to or greater than 1 and equal to or smaller than m, d₀, . . . , d_(k−ϕ−1) denote different integers equal to or greater than 0 and smaller than k, e₀, . . . , e_(ϕ−1) denote different integers equal to or greater than 0 and smaller than k that are different from d₀, . . . , d_(k−ϕ−1), p₀, . . . , p_(ϕ−1) denote different integers equal to or greater than k and smaller than n, and the decoding method comprises: generating, by circuitry of a decoding apparatus, a ϕ-th order vector b′ using ϕ elements b_(p0), . . . , b_(pϕ−1), of the vector b according to the following formula: $b^{\prime} = {\begin{pmatrix} b_{0}^{\prime} \\ b_{1}^{\prime} \\ \vdots \\ b_{\varphi - 1}^{\prime} \end{pmatrix} = \begin{pmatrix} {b_{p_{0}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{0}d_{i}}b_{d_{i}}}}} \\ {b_{p_{1}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{1}d_{i}}b_{d_{i}}}}} \\ \vdots \\ {b_{p_{\varphi - 1}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{\varphi - 1}d_{i}}b_{d_{i}}}}} \end{pmatrix}}$ generating, by circuitry of the decoding apparatus, a ϕ-by-ϕ inverse matrix A′⁻¹ according to the following formula: ${A^{\prime - 1} = \begin{pmatrix} x^{p_{0}e_{0}} & x^{p_{0}e_{1}} & \ldots & x^{p_{0}e_{\varphi - 1}} \\ x^{p_{1}e_{0}} & x^{p_{1}e_{1}} & \ldots & x^{p_{1}e_{\varphi - 1}} \\ \vdots & \vdots & \ddots & \vdots \\ x^{p_{\varphi - 1}e_{0}} & x^{p_{\varphi - 1}e_{1}} & \ldots & x^{p_{\varphi - 1}e_{\varphi - 1}} \end{pmatrix}^{- 1}};$ and computing, by circuitry of the decoding apparatus, the elements a_(e0), . . . , a_(eϕ−1), of the vector a by multiplying the vector b′ and the inverse matrix A′⁻¹.
 6. (canceled) 7: A non-transitory computer readable medium including computer executable instructions that make a decoding apparatus, wherein x is an element of an irreducible polynomial f[X] that generates an extension field GF(x^(q)), n and k are integers equal to or greater than 2, n≥2k−1, m denotes an integer equal to or greater than 1, m=n−k, a denotes a k-th order vector having elements a₀, . . . , a_(k−1) (a₀, . . . , a_(k−1)∈GF(x^(q))), A denotes a n-by-k matrix defined by the following formula: $A_{ij} = \left\{ {{{\begin{matrix} 1 & {{{if}\mspace{14mu} i} = j} \\ 0 & {{{if}\mspace{14mu} i} \neq {j\mspace{14mu} {and}\mspace{14mu} i} < k} \\ x^{{({i - k})}j} & {{{if}\mspace{14mu} i} \geq k} \end{matrix}{where}i} \in \left\{ {0,\ldots \mspace{14mu},{n - 1}} \right\}},{j \in \left\{ {0,\ldots \mspace{14mu},{k - 1}} \right\}},} \right.$ b denotes an n-th order vector having elements b₀, . . . , b_(n−1) (b₀, . . . , b_(n−1)∈GF(x^(q))) obtained by multiplying the vector a by the matrix A, ϕ denotes an integer equal to or greater than 1 and equal to or smaller than m, d₀, . . . , d_(k−ϕ−1) denote different integers equal to or greater than 0 and smaller than k, e₀, . . . , e_(ϕ−1) denote different integers equal to or greater than 0 and smaller than k that are different from d₀, . . . , d_(k−ϕ−1), p₀, . . . , p_(ϕ−1) denote different integers equal to or greater than k and smaller than n, perform a method comprising: generating a ϕ-th order vector b′ using ϕ elements b_(p0), . . . , b_(pϕ−1) of the vector b according to the following formula: $b^{\prime} = {\begin{pmatrix} b_{0}^{\prime} \\ b_{1}^{\prime} \\ \vdots \\ b_{\varphi - 1}^{\prime} \end{pmatrix} = \begin{pmatrix} {b_{p_{0}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{0}d_{i}}b_{d_{i}}}}} \\ {b_{p_{1}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{1}d_{i}}b_{d_{i}}}}} \\ \vdots \\ {b_{p_{\varphi - 1}} - {\sum\limits_{i < {k - \varphi}}{x^{p_{\varphi - 1}d_{i}}b_{d_{i}}}}} \end{pmatrix}}$ generating a ϕ-by-ϕ inverse matrix A′⁻¹ according to the following formula: ${A^{\prime - 1} = \begin{pmatrix} x^{p_{0}e_{0}} & x^{p_{0}e_{1}} & \ldots & x^{p_{0}e_{\varphi - 1}} \\ x^{p_{1}e_{0}} & x^{p_{1}e_{1}} & \ldots & x^{p_{1}e_{\varphi - 1}} \\ \vdots & \vdots & \ddots & \vdots \\ x^{p_{\varphi - 1}e_{0}} & x^{p_{\varphi - 1}e_{1}} & \ldots & x^{p_{\varphi - 1}e_{\varphi - 1}} \end{pmatrix}^{- 1}};$ and computing the elements a_(e0), . . . , a_(eϕ−1) of the vector a by multiplying the vector b′ and the inverse matrix A′⁻¹. 8: The decoding apparatus according to claim 2, wherein x=2, and the circuitry is configured to perform an exclusive-OR operation as an addition and perform a bit shift operation as a polynomial multiplication. 9: The decoding apparatus according to claim 3, wherein x=2, and the circuitry is configured to perform an exclusive-OR operation as an addition and perform a bit shift operation as a polynomial multiplication. 